package puj.promobil.prometer.webservices.mobileclient;

import java.io.IOException;

import org.ksoap2.SoapEnvelope;
import org.ksoap2.serialization.*;
import org.ksoap2.transport.HttpTransportSE;
import org.xmlpull.v1.XmlPullParserException;

import com.google.gson.Gson;

import puj.promobil.prometer.dto.ImagenContenedor;
import puj.promobil.prometer.dto.MedidaSolicitud;

public class PrometerMobileWSClient {

	// Constantes para la invocacion del web service
	private static final String NAMESPACE = "http://prometer.promobil.puj/";
	private String url; // = "http://192.168.2.100:8080/prometer/ConnectionTest?WSDL";
	
	//metodos
	private static final String METHOD_CONNECTION_TEST = "connectionTest";
	private static final String SOAP_ACTION_CONNECTION_TEST = NAMESPACE + METHOD_CONNECTION_TEST;

	private static final String METHOD_PRECARCAR = "precargar";
	private static final String SOAP_ACTION_PRECARCAR = NAMESPACE + METHOD_CONNECTION_TEST;

	private static final String METHOD_MEDIR = "medirImagen";
	private static final String SOAP_ACTION_MEDIR = NAMESPACE + METHOD_MEDIR;
	
	private static final String METHOD_SINCRONIZAR = "sincronizar";
	private static final String SOAP_ACTION_SINCRONIZAR = NAMESPACE + METHOD_MEDIR;
	
	// Declaracion de variables para consuymir el web service
	private SoapObject request = null;
	private SoapSerializationEnvelope envelope = null;
	private SoapPrimitive resultsRequestSOAP = null;
	
	
	
	public PrometerMobileWSClient(String url){
		this.url=url;
	}

	public boolean connectionTest(String User, String pwd) throws Exception {

		try {
			// TODO Auto-generated method stub

			// Se crea un objeto SoapObject para poder realizar la peticion
			// para consumir el ws SOAP. El constructor recibe
			// el namespace. Por lo regular el namespace es el dominio
			// donde se encuentra el web service
			request = new SoapObject(NAMESPACE, METHOD_CONNECTION_TEST);
			
			request.addProperty("username",User);
			request.addProperty("pwd",pwd);

			// Se crea un objeto SoapSerializationEnvelope para serealizar la
			// peticion SOAP y permitir viajar el mensaje por la nube
			// el constructor recibe la version de SOAP
			envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			// envelope.dotNet = true; //se asigna true para el caso de que el
			// WS sea de dotNet

			// Se envuelve la peticion soap
			envelope.setOutputSoapObject(request);

			// Objeto que representa el modelo de transporte
			// Recibe la URL del ws
			HttpTransportSE transporte = new HttpTransportSE(url);

			try {
				// Hace la llamada al ws
				transporte.call(SOAP_ACTION_CONNECTION_TEST, envelope);

				// Se crea un objeto SoapPrimitive y se obtiene la respuesta
				// de la peticion
				resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();

			} catch (IOException e) {
				throw e;
			} catch (XmlPullParserException e) {
				throw e;
			}

			// Almacenamos el resultado en un String ya que lo que represa
			// el ws es una cadena json, representando una lista AndroidOS
			// de objetos del tipo
			String respuesta = resultsRequestSOAP.toString();
			return respuesta.equals("true");
		} catch (Exception e) {
			throw e;
		}

	}
	
	public String precargar(String User, String pwd) throws Exception {

		try {
			// TODO Auto-generated method stub

			// Se crea un objeto SoapObject para poder realizar la peticion
			// para consumir el ws SOAP. El constructor recibe
			// el namespace. Por lo regular el namespace es el dominio
			// donde se encuentra el web service
			request = new SoapObject(NAMESPACE, METHOD_PRECARCAR);
			
			request.addProperty("username",User);
			request.addProperty("pwd",pwd);

			// Se crea un objeto SoapSerializationEnvelope para serealizar la
			// peticion SOAP y permitir viajar el mensaje por la nube
			// el constructor recibe la version de SOAP
			envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			// envelope.dotNet = true; //se asigna true para el caso de que el
			// WS sea de dotNet

			// Se envuelve la peticion soap
			envelope.setOutputSoapObject(request);

			// Objeto que representa el modelo de transporte
			// Recibe la URL del ws
			HttpTransportSE transporte = new HttpTransportSE(url);

			try {
				// Hace la llamada al ws
				transporte.call(SOAP_ACTION_PRECARCAR, envelope);

				// Se crea un objeto SoapPrimitive y se obtiene la respuesta
				// de la peticion
				resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();

			} catch (IOException e) {
				throw e;
			} catch (XmlPullParserException e) {
				throw e;
			}

			// Almacenamos el resultado en un String ya que lo que represa
			// el ws es una cadena json, representando una lista AndroidOS
			// de objetos del tipo
			String respuesta = resultsRequestSOAP.toString();
			return respuesta;
		} catch (Exception e) {
			throw e;
		}

	}
	
	public String sincronizacion(String User, String pwd, String data) throws Exception {

		try {
			// TODO Auto-generated method stub

			// Se crea un objeto SoapObject para poder realizar la peticion
			// para consumir el ws SOAP. El constructor recibe
			// el namespace. Por lo regular el namespace es el dominio
			// donde se encuentra el web service
			request = new SoapObject(NAMESPACE, METHOD_SINCRONIZAR);
			
			request.addProperty("username",User);
			request.addProperty("pwd",pwd);
			request.addProperty("datos",data);

			// Se crea un objeto SoapSerializationEnvelope para serealizar la
			// peticion SOAP y permitir viajar el mensaje por la nube
			// el constructor recibe la version de SOAP
			envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			// envelope.dotNet = true; //se asigna true para el caso de que el
			// WS sea de dotNet

			// Se envuelve la peticion soap
			envelope.setOutputSoapObject(request);

			// Objeto que representa el modelo de transporte
			// Recibe la URL del ws
			HttpTransportSE transporte = new HttpTransportSE(url);

			try {
				// Hace la llamada al ws
				transporte.call(SOAP_ACTION_SINCRONIZAR, envelope);

				// Se crea un objeto SoapPrimitive y se obtiene la respuesta
				// de la peticion
				resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();

			} catch (IOException e) {
				throw e;
			} catch (XmlPullParserException e) {
				throw e;
			}

			// Almacenamos el resultado en un String ya que lo que represa
			// el ws es una cadena json, representando una lista AndroidOS
			// de objetos del tipo
			String respuesta = "";//resultsRequestSOAP.toString();
			return respuesta;
		} catch (Exception e) {
			throw e;
		}

	}
	
	////
	
	public String medirImagen(MedidaSolicitud sol) throws Exception {

		try {
			// TODO Auto-generated method stub

			// Se crea un objeto SoapObject para poder realizar la peticion
			// para consumir el ws SOAP. El constructor recibe
			// el namespace. Por lo regular el namespace es el dominio
			// donde se encuentra el web service
			request = new SoapObject(NAMESPACE, METHOD_MEDIR);
			
			Gson gson=new Gson();
			
			request.addProperty("imagen",gson.toJson(new ImagenContenedor(sol.getData())));
			request.addProperty("alto",sol.getAlto());
			request.addProperty("ancho",sol.getAncho());
			request.addProperty("x1",sol.getX1());
			request.addProperty("y1",sol.getY1());
			request.addProperty("x2",sol.getX2());
			request.addProperty("y2",sol.getY2());
			request.addProperty("x3",sol.getX3());
			request.addProperty("y3",sol.getY3());
			request.addProperty("x4",sol.getX4());
			request.addProperty("y4",sol.getY4());
			request.addProperty("ref",sol.getRef());
			

			// Se crea un objeto SoapSerializationEnvelope para serealizar la
			// peticion SOAP y permitir viajar el mensaje por la nube
			// el constructor recibe la version de SOAP
			envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
			// envelope.dotNet = true; //se asigna true para el caso de que el
			// WS sea de dotNet

			// Se envuelve la peticion soap
			envelope.setOutputSoapObject(request);

			// Objeto que representa el modelo de transporte
			// Recibe la URL del ws
			HttpTransportSE transporte = new HttpTransportSE(url);

			try {
				// Hace la llamada al ws
				transporte.call(SOAP_ACTION_MEDIR, envelope);

				// Se crea un objeto SoapPrimitive y se obtiene la respuesta
				// de la peticion
				resultsRequestSOAP = (SoapPrimitive) envelope.getResponse();

			} catch (IOException e) {
				throw e;
			} catch (XmlPullParserException e) {
				throw e;
			}

			// Almacenamos el resultado en un String ya que lo que represa
			// el ws es una cadena json, representando una lista AndroidOS
			// de objetos del tipo
			String respuesta = resultsRequestSOAP.toString();
			return respuesta;
		} catch (Exception e) {
			e.printStackTrace();
			throw e;
		}

	}

	

}
